package com.crazyhat.crazyhat.tasks;

import java.time.Duration;
import java.time.LocalDateTime;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import com.crazyhat.crazyhat.service.IClubService;

/**
 * 社团热度定时更新任务
 */
@Component
public class PopularityUpdateTask {
    
    @Autowired
    private IClubService clubService;

    /**
     * 两次更新最小间隔分钟数
     */
    private final int MinIntervalMinutes=10;

    LocalDateTime localDateTime=LocalDateTime.now();

    /**
     * 定时更新社团的热度。
     * 使用CRON表达式定义更新的周期，具体表达式由配置文件提供。
     * 该方法确保在上一次更新后的最小间隔时间内不会再次触发更新，
     * 以避免过于频繁的数据库操作。
     */
    @Scheduled(cron = "${my-config.club-popularity-update-rule.cron}")
    public void updatePopularity() {

        // 计算自上一次更新时间以来的时长
        Duration duration=Duration.between(localDateTime, LocalDateTime.now());

        // 检查是否达到了最小更新间隔时间
        if (duration.toMinutes()< MinIntervalMinutes) {
            return;
        }

        // 如果达到了最小更新间隔，则调用服务进行更新
        clubService.updateClubPopularity();

        // 更新最后更新时间
        localDateTime = LocalDateTime.now();
    }
}
